// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLHint;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLReplaceable;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.expr.SQLListExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include <list>
#include "SQLTableSourceImpl.h"
#include "SQLSelectQuery.h"
#include "../SQLReplaceable.h"
#include "../../../utils/common_ptr.h"

class SQLValuesTableSource :virtual public SQLTableSourceImpl, virtual public SQLSelectQuery, virtual public SQLReplaceable
{
public:
  BOOL_ptr parenthesized;
  SQLListExpr_list_ptr values;
  SQLName_list_ptr columns;

  SQLValuesTableSource();
  SHAREDOBJECT(SQLValuesTableSource);

  SQLListExpr_list_ptr getValues();

  void addValue(SQLListExpr_ptr row);

  SQLName_list_ptr getColumns();

  void addColumn(SQLName_ptr column);

  void addColumn(string_ptr column);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  BOOL_ptr isParenthesized();

  // @Override
  void setParenthesized(BOOL_ptr paren);

  // @Override
  SQLObject_ptr clone();

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);
};
